home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
gfx
/
show
/
swfplayersrc.lha
/
Lib
/
graphic.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-06-04
|
5KB
|
175 lines
/////////////////////////////////////////////////////////////
// Flash Plugin and Player
// Copyright (C) 1998 Olivier Debon
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
//
///////////////////////////////////////////////////////////////
#ifndef _GRAPHIC_H_
#define _GRAPHIC_H_
#define ALPHA_OPAQUE 255
enum FillType {
f_Solid = 0x00,
f_LinearGradient = 0x10,
f_RadialGradient = 0x12,
f_TiledBitmap = 0x40,
f_clippedBitmap = 0x41,
f_None = 0x80
};
struct Gradient {
int nbGradients;
unsigned char ratio[8];
Color color[8];
// For rendering
Color *ramp;
Matrix imat;
int has_alpha;
};
struct FillStyleDef {
FillType type; // See enum FillType
// Solid
Color color;
// Gradient
Gradient gradient;
// Bitmap
Bitmap *bitmap;
Matrix bitmap_matrix;
Color *cmap;
unsigned char *alpha_table;
// Gradient or Bitmap
Matrix matrix;
FillStyleDef() {
style_size += sizeof(FillStyleDef);
style_nb++;
}
};
struct Segment {
long x1,x2;
long ymax;
FillStyleDef *fs[2]; // 0 is left 1 is right
int aa;
long dX;
long X;
struct Segment *next;
struct Segment *nextValid;
};
/* fractional bits (we don't use twips here... too expensive) */
#define FRAC_BITS 5
#define FRAC (1 << FRAC_BITS)
#define NB_SEGMENT_MAX (2048*4)
#define SEGFRAC 8
class GraphicDevice {
int targetWidth;
int targetHeight;
Rect viewPort;
int movieWidth;
int movieHeight;
int zoom;
unsigned long redMask;
unsigned long greenMask;
unsigned long blueMask;
int clipping;
public:
FlashDisplay *flashDisplay;
int bgInitialized;
Color backgroundColor;
Color foregroundColor;
public:
void *scan_line_func_id;
ScanLineFunc scan_line_func;
Rect clip_rect;
private:
Segment **segs;
int ymin,ymax;
int height;
Segment *seg_pool;
Segment *seg_pool_cur;
Segment * allocSeg();
Segment * progressSegments(Segment * curSegs, long y);
Segment * newSegments(Segment *curSegs, Segment *newSegs);
void renderScanLine(long y, Segment *curSegs);
protected:
long clip(long &y, long &start, long &end);
public:
Matrix *adjust; // Matrix to fit window (shrink or expand)
long showMore; // Used for debugging
// For Direct Graphics
unsigned char *canvasBuffer; // A pointer to canvas'memory
long bpl; // Bytes per line
long bpp; // Bytes per pixel
long pad; // Scanline pad in byte
GraphicDevice(FlashDisplay *fd);
virtual ~GraphicDevice();
int setBackgroundColor(Color);
void setForegroundColor(Color);
Color getBackgroundColor();
Color getForegroundColor();
void setMovieDimension(long width, long height);
void setMovieZoom(int zoom);
void setMovieOffset(long x, long y);
long getWidth();
long getHeight();
Color *getColormap(Color *old, long n, Cxform *cxform);
void drawBox(long x1, long y1, long x2, long y2);
void addSegment(long x1, long y1, long x2, long y2,
FillStyleDef *f0,
FillStyleDef *f1,
int aa);
void drawPolygon(void);
void updateClippingRegion(Rect *);
void setClipping(int);
// Virtual functions
virtual void clearCanvas();
virtual long allocColor(Color color);
virtual void fillLineBitmap(FillStyleDef *f, long y, long start, long end);
virtual void fillLineLG(Gradient *grad, long y, long start, long end);
virtual void fillLineRG(Gradient *grad, long y, long start, long end);
virtual void fillLine(FillStyleDef *f, long y, long start, long end);
virtual void fillLineAA(FillStyleDef *f, long y, long start, long end);
virtual void drawLine(long x1, long y1, long x2, long y2, long width);
};
#endif /* _GRAPHIC_H_ */